/*
 ============================================================================
 文件名 	: EasyBounceGameContainer.h
 描述		: Game界面容器（Container）.
 ============================================================================
 */

#ifndef EASYBOUNCEGAMECONTAINER_H_
#define EASYBOUNCEGAMECONTAINER_H_

// 引用
#include <coecntrl.h>
#include <aknlists.h>
#include <AknsBasicBackgroundControlContext.h>

#include "coedef.h"
#include "GameObserver.h"

/**
*  容器控件类.
*/
class CEasyBounceGameContainer : public CCoeControl, MCoeControlObserver, 
                                public MGameObserver
    {
    public: // 构造和析构函数

    	static CEasyBounceGameContainer* NewL();

        /**
        * 虚析构函数.
        */
        ~CEasyBounceGameContainer();
        
        /*
          OfferKeyEventL
	              处理按键事件
          @参数aKeyEvent，按键事件
          @参数aType，按键事件类型，分为以下三种: EEventKey, EEventKeyUp以及EEventKeyDown.
          @返回值用来表示按键事件是否被此控件处理.
          */
        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
    
    public: // 继承自MGameObserver
    	void GameChanged( CEngine* aGame );
    	void GameOver( CEngine* aGame );
    	void GamePaused( CEngine* aGame );
    	void BallHitsLine( CEngine* aGame );
    	
	
    private: // 基类函数
    	
    	CEasyBounceGameContainer();

    	/**
        * 两阶段构造函数.
        */
        void ConstructL();

        /**
         * 继承自CoeControl,SizeChanged.
         */
        void SizeChanged();

        /**
         * 继承自CoeControl,CountComponentControls.
         */
        TInt CountComponentControls() const;

        /**
         * 继承自CCoeControl,ComponentControl.
         */
        CCoeControl* ComponentControl(TInt aIndex) const;

        /**
         * 继承自CCoeControl,Draw.
         */
        void Draw(const TRect& aRect) const;

        /**
         * 继承自CCoeControl, HandleControlEventL.
         * 用于处理控件事件
         */
        void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
        
        /**
         * 继承自CCoeContro, HandlePointerEventL
         */
        void HandlePointerEventL(const TPointerEvent& aPointerEvent);
        
        /**
        * 继承自CCoeControl, HandleResourceChange
        */
        void HandleResourceChange(TInt aType);
        
        /**
         * 用于支持皮肤
         */
        TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
        
        /*
         * 计算所有控件布局
         */
        void CaculateLayout();
        
        
    private: //数据
    	CEikImage* iWoodenBall;
    	CFbsBitmap* iBall, *iBallMask;
    	TPoint iLineStart, iLineEnd;
    	TRect iModelRect;
    	
    	//此成员用于支持皮肤
    	CAknsBasicBackgroundControlContext* iBgContext;
    	
    public: 
    	enum TControls
    		{
    		EWoodenBallImage,
    		ELastControl
    		};
    };

#endif /* EASYBOUNCEGAMECONTAINER_H_ */
